package tas.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import tas.dao.DaoHorasExtra;
import tas.sql.ConectaDb;

public class DaoHorasExtraImpl implements DaoHorasExtra {

    private final ConectaDb db;

    public DaoHorasExtraImpl() {
        this.db = new ConectaDb();
    }

    @Override
    public List<Object[]> horasExtraSolicitudQry(Integer idtrabajador, String periodo) {
        List<Object[]> list = null;
        String sql = "SELECT "
                + "SOLHOEXT.IDSOLICITUDHORAEXTRA SOLICITUD, "
                + "SOLHOEXT.IDESTADOHORAEXTRAVIGENTE CODESTADO, "
                + "SOLHOEXT.IDTRABAJADOR, "
                + "TO_CHAR(SOLHEDET.FECHAHORAEXTRA, 'DD/MM/YYYY' ) FECHAHORAEXTRA, "
                + "ESTSOL.DESCRIPCIONESTADOHORAEXTRA ESTADO, "
                + "TO_CHAR(SOLHOEXT.FECHAREGISTRO, 'DD/MM/YYYY' ) FECHAREGISTRO "
                + "FROM BDTAS.SOLICITUDHORAEXTRA SOLHOEXT "
                + "LEFT JOIN BDTAS.SOLICITUDHORAEXTRADETALLE SOLHEDET "
                + "ON (SOLHOEXT.IDSOLICITUDHORAEXTRA = SOLHEDET.IDSOLICITUDHORAEXTRA) "
                + "LEFT JOIN BDTAS.SOLICITUDHORAEXTRAESTADO ESTSOL "
                + "ON (ESTSOL.IDESTADOHORAEXTRA=SOLHOEXT.IDESTADOHORAEXTRAVIGENTE) "
                + "WHERE SOLHOEXT.IDTRABAJADOR=? "
                + "AND TO_CHAR(SOLHOEXT.FECHAREGISTRO, 'YYYYMM')=? "
                + "ORDER BY 1,2";

        Connection cn = db.getBdtas();
        
        if (cn != null) {
            try {
                PreparedStatement ps = cn.prepareStatement(sql);
                ps.setInt(1, idtrabajador);
                ps.setString(2, periodo);

                ResultSet rs = ps.executeQuery();

                list = new LinkedList<Object[]>();
                while (rs.next()) {
                    Object[] f = new Object[6];

                    f[0] = rs.getObject(1); // SOLICITUD
                    f[1] = rs.getObject(2); // CODESTADO
                    f[2] = rs.getObject(3); // IDTRABAJADOR
                    f[3] = rs.getObject(4); // FECHAHORASEXTRA
                    f[4] = rs.getObject(5); // ESTADO
                    f[5] = rs.getObject(6); // FECHADEREGISTRO
                    

                    list.add(f);
                }

            } catch (SQLException e) {
            } finally {
                try {
                    cn.close();
                } catch (SQLException e) {
                }
            }
        }
        return list;

    }

    @Override
    public List<Object[]> horasExtraSolicitudConHIR(List<Integer> idtrabajador, String fecha) {
        List<Object[]> list=null;
        
        String sql="SELECT TRA.IDTRABAJADOR, "
                + "VIS_TRA.APELLIDOPATERNO   ||  ' ' ||  VIS_TRA.APELLIDOMATERNO ||  ', ' || VIS_TRA.NOMBRE TRABAJADOR, "
                + "VIS_TRA.NUMERODOCUMENTOIDENTIDAD, "
                + "TO_CHAR(PROG.HORASALIDA, 'HH24:MM') HORA "
                + "FROM BDTAS.FECHAXTRABAJADOR  PROG "
                + "LEFT JOIN BDTAS.TRABAJADOR TRA "
                + "ON (PROG.IDTRABAJADOR=TRA.IDTRABAJADOR) "
                + "LEFT JOIN ADMINPJ.V_PER_CTL_TRABAJADOR VIS_TRA "
                + "ON (VIS_TRA.IDTRABAJADORCORE=TRA.IDTRABAJADORCORE) "
                + "WHERE PROG.IDTRABAJADOR IN (?) "
                + "AND TO_CHAR(PROG.IDFECHA, 'DD/MM/YYYY')=?";
        Connection cn = db.getBdtas();
        if(cn != null){
            try {
                list = new LinkedList<Object[]>();
                for (Integer idhorE : idtrabajador) {
                    PreparedStatement ps = cn.prepareStatement(sql);
                    ps.setInt(1, idhorE);
                    ps.setString(2, fecha);
                    
                    ps.executeQuery();
                    
                    
                }
                
            } catch (SQLException e) {
            }finally{
                try {
                    cn.close();
                } catch (SQLException e) {
                }
            }
        }
        
        return list;
    }

}
